EditInfoActivity.java revision 733755a13ab3eb4e1ea3799ff633c4ce5e5a3014
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;
30432ad365542a71f22c81c341592a16cde9e6be6fJuan Langimport android.preference.PreferenceFragment;
313e9a352c46d82c10a6ba906cfba03e9efcda1c98mariagpuyolimport android.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;
40b101808f242719aea123c138883a0854cd0a8ad1mariagpuyolimport com.android.emergency.view.ViewInfoActivity;
41432ad365542a71f22c81c341592a16cde9e6be6fJuan Langimport com.android.internal.annotations.VisibleForTesting;
424ca9a496b859f603103d7cdedcb51607ab9d36c5mariagpuyolimport com.android.internal.logging.MetricsLogger;
432fdeb9a7dd9b460c621a7a9eb4f04687a6da158dTamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent;
44de7a405217ad397057dfcc8c386330c73339b31dmariagpuyol
45c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyolimport java.util.ArrayList;
46c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyol
47cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan/**
48cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan * Activity for editing emergency information.
49cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan */
50432ad365542a71f22c81c341592a16cde9e6be6fJuan Langpublic class EditInfoActivity extends Activity {
51124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol    static final String TAG_CLEAR_ALL_DIALOG = "clear_all_dialog";
52de7a405217ad397057dfcc8c386330c73339b31dmariagpuyol
53432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    private EditInfoFragment mEditInfoFragment;
54432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang
55cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan    @Override
56cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan    protected void onCreate(Bundle savedInstanceState) {
57cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan        super.onCreate(savedInstanceState);
58b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        // Protect against b/28401242 by enabling ViewInfoActivity.
59b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        // We used to have code that disabled/enabled it and it could have been left in disabled
60b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        // state.
61b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        PackageManager pm = getPackageManager();
62b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol        pm.setComponentEnabledSetting(new ComponentName(this, ViewInfoActivity.class),
63b101808f242719aea123c138883a0854cd0a8ad1mariagpuyol                PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
64232daafc102052b458a3d3847ff9290f73915395mariagpuyol
65733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang        getActionBar().setDisplayHomeAsUpEnabled(true);
66733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang
67432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang        mEditInfoFragment = new EditInfoFragment();
68432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang        getFragmentManager().beginTransaction()
69432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang            .replace(android.R.id.content, mEditInfoFragment)
70432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang            .commit();
717ee3df3c714b614ab28cef094a28543fb5e01465mariagpuyol
728ab27ec8dd566cb0d4215439bdf5773ba2c239b1mariagpuyol        getWindow().addFlags(FLAG_DISMISS_KEYGUARD);
73ea078ed952308c070012a96218a800939986cf90mariagpuyol        MetricsLogger.visible(this, MetricsEvent.ACTION_EDIT_EMERGENCY_INFO);
74ea078ed952308c070012a96218a800939986cf90mariagpuyol    }
75cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan
76ea078ed952308c070012a96218a800939986cf90mariagpuyol    @Override
7788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    public boolean onCreateOptionsMenu(Menu menu) {
7888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        MenuInflater inflater = getMenuInflater();
7988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        inflater.inflate(R.menu.edit_info_menu, menu);
8088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        return true;
81ea078ed952308c070012a96218a800939986cf90mariagpuyol    }
829be32659526009cdd4e2cd7c15e89bae5e2ef619mariagpuyol
839be32659526009cdd4e2cd7c15e89bae5e2ef619mariagpuyol    @Override
8488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    public boolean onOptionsItemSelected(MenuItem item) {
8588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        switch (item.getItemId()) {
86733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang            case android.R.id.home:
87733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                // The user asked to navigate up, which, in this case, can easily be accomplished
88733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                // by finishing the activity.
89733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                finish();
90733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang                return true;
91733755a13ab3eb4e1ea3799ff633c4ce5e5a3014Juan Lang
9288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            case R.id.action_clear_all:
9388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                showClearAllDialog();
9488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                return true;
9588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
9688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        return super.onOptionsItemSelected(item);
9788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
9888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
99432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    /** @return The single fragment managed by this activity. */
100432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    @VisibleForTesting
101432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang    public PreferenceFragment getFragment() {
102432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang        return mEditInfoFragment;
103c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyol    }
104c3f3a80735a541f91a09a2e50cf808349f92541bmariagpuyol
10588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    private void showClearAllDialog() {
106124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol        final ClearAllDialogFragment previousFragment =
107124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol                (ClearAllDialogFragment) getFragmentManager()
108124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol                        .findFragmentByTag(EditInfoActivity.TAG_CLEAR_ALL_DIALOG);
109124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol        if (previousFragment == null) {
110124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol            DialogFragment newFragment = ClearAllDialogFragment.newInstance();
111124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol            newFragment.show(getFragmentManager(), TAG_CLEAR_ALL_DIALOG);
11288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
11388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
114f0e8818031c5e1ceb40e4f22bd3bc27a2b6771camariagpuyol
115124a8fdf53a4815c0f57b6178e97322dc86d40a6mariagpuyol    private void onClearAllPreferences() {
1160556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
1170556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        for (String key : PreferenceKeys.KEYS_EDIT_EMERGENCY_INFO) {
1180556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol            sharedPreferences.edit().remove(key).commit();
1190556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        }
1200556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        sharedPreferences.edit().remove(PreferenceKeys.KEY_EMERGENCY_CONTACTS).commit();
12188757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
1220556d6c6abe3add19e72d52ed58d39c087720527mariagpuyol        // Refresh the UI.
123432ad365542a71f22c81c341592a16cde9e6be6fJuan Lang        mEditInfoFragment.reloadFromPreference();
12488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
12588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
126de7a405217ad397057dfcc8c386330c73339b31dmariagpuyol    /**
12788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol     * Dialog shown to the user when they tap on the CLEAR ALL menu item. Using a {@link
12888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol     * DialogFragment} takes care of screen rotation issues.
12988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol     */
13088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    public static class ClearAllDialogFragment extends DialogFragment {
13188757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
13288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        @Override
13388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        public Dialog onCreateDialog(Bundle savedInstanceState) {
13488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            Dialog dialog = new AlertDialog.Builder(getActivity())
13588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .setMessage(R.string.clear_all_message)
13688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .setPositiveButton(R.string.clear, new DialogInterface.OnClickListener() {
13788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                        @Override
13888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                        public void onClick(DialogInterface dialog, int which) {
13988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                            ((EditInfoActivity) getActivity()).onClearAllPreferences();
14088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                        }
14188757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    })
14288757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .setNegativeButton(android.R.string.cancel, null)
14388757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol                    .create();
14488757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            return dialog;
14588757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
14688757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol
14788757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        public static DialogFragment newInstance() {
14888757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol            return new ClearAllDialogFragment();
14988757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol        }
15088757784ed5a3f0b1cf386cd05f8a440ebd46e5bmariagpuyol    }
151cdb6c148d185e06be10288e7dd7896ab13278e5fAkshay Kannan}
152