1cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan/*
2cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * Copyright (C) 2016 The Android Open Source Project
3cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan *
4cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * Licensed under the Apache License, Version 2.0 (the "License");
5cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * you may not use this file except in compliance with the License.
6cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * You may obtain a copy of the License at
7cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan *
8cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan *      http://www.apache.org/licenses/LICENSE-2.0
9cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan *
10cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * Unless required by applicable law or agreed to in writing, software
11cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * distributed under the License is distributed on an "AS IS" BASIS,
12cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * See the License for the specific language governing permissions and
14cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * limitations under the License.
15cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan */
165874835f1edc1cac42eb4b3aa5fe437e8fd53c78mariagpuyolpackage com.android.emergency.edit;
17cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan
188ab27ec8dd566cb0d4215439bdf5773ba2c239b1mariagpuyolimport static android.view.WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD;
198ab27ec8dd566cb0d4215439bdf5773ba2c239b1mariagpuyol
20432ad365542a71f22c81c341592a16cde9e6be6fJuan Langimport android.app.Activity;
21de7a405217ad397057dfcc8c386330c73339b31dmariagpuyolimport android.app.AlertDialog;
22de7a405217ad397057dfcc8c386330c73339b31dmariagpuyolimport android.app.Dialog;
23de7a405217ad397057dfcc8c386330c73339b31dmariagpuyolimport android.app.DialogFragment;
24de7a405217ad397057dfcc8c386330c73339b31dmariagpuyolimport android.app.Fragment;
25b101808f242719aea123c138883a0854cd0a8ad1mariagpuyolimport android.content.ComponentName;
26de7a405217ad397057dfcc8c386330c73339b31dmariagpuyolimport android.content.DialogInterface;
270556d6c6abe3add19e72d52ed58d39c087720527mariagpuyolimport android.content.SharedPreferences;
28b101808f242719aea123c138883a0854cd0a8ad1mariagpuyolimport android.content.pm.PackageManager;
29cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannanimport android.os.Bundle;
302c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Langimport android.support.v14.preference.PreferenceFragment;
312c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Langimport android.support.v7.preference.PreferenceManager;
32c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyolimport android.util.Pair;
3388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyolimport android.view.Menu;
3488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyolimport android.view.MenuInflater;
3588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyolimport android.view.MenuItem;
36cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan
370556d6c6abe3add19e72d52ed58d39c087720527mariagpuyolimport com.android.emergency.PreferenceKeys;
38232daafc102052b458a3d3847ff9290f73915395mariagpuyolimport com.android.emergency.R;
391113c27438c8affdb1c852c6f7c9ff52416e874aJuan Langimport com.android.emergency.overlay.FeatureFactory;
40d6bbac5f7c1dca2e9b961863c079296dbf5f08a6Juan Langimport com.android.emergency.util.PreferenceUtils;
41b101808f242719aea123c138883a0854cd0a8ad1mariagpuyolimport com.android.emergency.view.ViewInfoActivity;
42432ad365542a71f22c81c341592a16cde9e6be6fJuan Langimport com.android.internal.annotations.VisibleForTesting;
434ca9a496b859f603103d7cdedcb51607ab9d36c5mariagpuyolimport com.android.internal.logging.MetricsLogger;
442fdeb9a7dd9b460c621a7a9eb4f04687a6da158dTamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
45de7a405217ad397057dfcc8c386330c73339b31dmariagpuyol
46c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyolimport java.util.ArrayList;
47c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyol
48cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan/**
49cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * Activity for editing emergency information.
50cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan */
51432ad365542a71f22c81c341592a16cde9e6be6fJuan Langpublic class EditInfoActivity extends Activity {
52124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol    static final String TAG_CLEAR_ALL_DIALOG = "clear_all_dialog";
53de7a405217ad397057dfcc8c386330c73339b31dmariagpuyol
54432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    private EditInfoFragment mEditInfoFragment;
55432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang
56cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan    @Override
57cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan    protected void onCreate(Bundle savedInstanceState) {
58cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan        super.onCreate(savedInstanceState);
59b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        // Protect against b/28401242 by enabling ViewInfoActivity.
60b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        // We used to have code that disabled/enabled it and it could have been left in disabled
61b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        // state.
62b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        PackageManager pm = getPackageManager();
63b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        pm.setComponentEnabledSetting(new ComponentName(this, ViewInfoActivity.class),
64b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
65232daafc102052b458a3d3847ff9290f73915395mariagpuyol
66733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang        getActionBar().setDisplayHomeAsUpEnabled(true);
67733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang
682c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang        // We only add a new EditInfoFragment if no fragment is restored.
692c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang        Fragment fragment = getFragmentManager().findFragmentById(android.R.id.content);
702c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang        if (fragment == null) {
712c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang            mEditInfoFragment = new EditInfoFragment();
722c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang            getFragmentManager().beginTransaction()
732c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang                .add(android.R.id.content, mEditInfoFragment)
742c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang                .commit();
752c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang        } else {
762c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang            mEditInfoFragment = (EditInfoFragment) fragment;
772c0518a7dfd5b7cd36e88d9f2df064b1e756bd83Juan Lang        }
787ee3df3c714b614ab28cef094a28543fb5e01465mariagpuyol
79d6bbac5f7c1dca2e9b961863c079296dbf5f08a6Juan Lang        // Show or hide the settings suggestion, depending on whether any emergency settings exist.
80d6bbac5f7c1dca2e9b961863c079296dbf5f08a6Juan Lang        PreferenceUtils.updateSettingsSuggestionState(this);
81d6bbac5f7c1dca2e9b961863c079296dbf5f08a6Juan Lang
828ab27ec8dd566cb0d4215439bdf5773ba2c239b1mariagpuyol        getWindow().addFlags(FLAG_DISMISS_KEYGUARD);
83ea078ed952308c070012a96218a800939986cf90mariagpuyol        MetricsLogger.visible(this, MetricsEvent.ACTION_EDIT_EMERGENCY_INFO);
84ea078ed952308c070012a96218a800939986cf90mariagpuyol    }
85cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan
86ea078ed952308c070012a96218a800939986cf90mariagpuyol    @Override
8788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    public boolean onCreateOptionsMenu(Menu menu) {
8888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        MenuInflater inflater = getMenuInflater();
8988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        inflater.inflate(R.menu.edit_info_menu, menu);
9088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        return true;
91ea078ed952308c070012a96218a800939986cf90mariagpuyol    }
929be32659526009cdd4e2cd7c15e89bae5e2ef619mariagpuyol
939be32659526009cdd4e2cd7c15e89bae5e2ef619mariagpuyol    @Override
9488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    public boolean onOptionsItemSelected(MenuItem item) {
9588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        switch (item.getItemId()) {
96733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang            case android.R.id.home:
97733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                // The user asked to navigate up, which, in this case, can easily be accomplished
98733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                // by finishing the activity.
99733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                finish();
100733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                return true;
101733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang
10288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            case R.id.action_clear_all:
10388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                showClearAllDialog();
10488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                return true;
10588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
10688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        return super.onOptionsItemSelected(item);
10788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
10888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
109432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    /** @return The single fragment managed by this activity. */
110432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    @VisibleForTesting
111432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    public PreferenceFragment getFragment() {
112432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang        return mEditInfoFragment;
113c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyol    }
114c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyol
11588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    private void showClearAllDialog() {
116124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol        final ClearAllDialogFragment previousFragment =
117124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol                (ClearAllDialogFragment) getFragmentManager()
118124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol                        .findFragmentByTag(EditInfoActivity.TAG_CLEAR_ALL_DIALOG);
119124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol        if (previousFragment == null) {
120124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol            DialogFragment newFragment = ClearAllDialogFragment.newInstance();
121124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol            newFragment.show(getFragmentManager(), TAG_CLEAR_ALL_DIALOG);
12288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
12388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
124f0e8818031c5e1ceb40e4f22bd3bc27a2b6771camariagpuyol
125124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol    private void onClearAllPreferences() {
1260556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
1270556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        for (String key : PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO) {
1280556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol            sharedPreferences.edit().remove(key).commit();
1290556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        }
1300556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        sharedPreferences.edit().remove(PreferenceKeys.KEY_EMERGENCY_CONTACTS).commit();
131d6bbac5f7c1dca2e9b961863c079296dbf5f08a6Juan Lang        // Show the settings suggestion again, since no emergency info is set.
132d6bbac5f7c1dca2e9b961863c079296dbf5f08a6Juan Lang        PreferenceUtils.enableSettingsSuggestion(this);
13388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
1340556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        // Refresh the UI.
135432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang        mEditInfoFragment.reloadFromPreference();
13688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
13788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
138de7a405217ad397057dfcc8c386330c73339b31dmariagpuyol    /**
13988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol     * Dialog shown to the user when they tap on the CLEAR ALL menu item. Using a {@link
14088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol     * DialogFragment} takes care of screen rotation issues.
14188757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol     */
14288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    public static class ClearAllDialogFragment extends DialogFragment {
14388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
14488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        @Override
14588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        public Dialog onCreateDialog(Bundle savedInstanceState) {
14688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            Dialog dialog = new AlertDialog.Builder(getActivity())
14788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .setMessage(R.string.clear_all_message)
14888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .setPositiveButton(R.string.clear, new DialogInterface.OnClickListener() {
14988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                        @Override
15088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                        public void onClick(DialogInterface dialog, int which) {
15188757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                            ((EditInfoActivity) getActivity()).onClearAllPreferences();
15288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                        }
15388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    })
15488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .setNegativeButton(android.R.string.cancel, null)
15588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .create();
15688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            return dialog;
15788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
15888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
15988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        public static DialogFragment newInstance() {
16088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            return new ClearAllDialogFragment();
16188757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
16288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
163cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan}
164