Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7675e12b authored by Daniel Lehmann's avatar Daniel Lehmann
Browse files

Add a new intent type that allows opening the Contacts app in its last state.

Also fix some broken comments.

Bug: 2615649
Change-Id: I65e1033b64cab38fbfb0c74e104dce382b4a2a20
parent 639e96ee
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@
            </intent-filter>
        </activity>

        <!-- Tab container for TwelveKeyDialer and RecentCallsList -->
        <!-- Tab container for all tabs -->
        <activity android:name="DialtactsActivity"
            android:label="@string/launcherDialer"
            android:theme="@style/DialtactsTheme"
@@ -115,7 +115,7 @@
            </intent-filter>
        </activity>

        <!-- Tab container for Activity Stream and Contacts -->
        <!-- Tab container for all tabs -->
        <activity-alias android:name="DialtactsContactsEntryActivity"
            android:targetActivity="DialtactsActivity"
            android:label="@string/contactsList"
@@ -137,6 +137,22 @@

        </activity-alias>

        <!-- Main launch Intent to open the Contacts app. This will open the app in its last manual
        state. This is the state that has been explicitly set by the user (e.g. by clicking a tab).
        States configured via other Intents (e.g. CallLog after Call) are not considered manual
        state. At the moment, the Intent always goes to the DialtactsActivity, but this might later
        be changed to also include sub-activities like Edit or View if they were left open -->

        <activity-alias android:name="ContactsLaunchActivity"
            android:targetActivity="DialtactsActivity"
        >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity-alias>

        <!-- An empty activity that presents the DialtactActivity's Favorites tab -->
        <activity-alias android:name="DialtactsFavoritesEntryActivity"
            android:targetActivity="DialtactsActivity"
+39 −5
Original line number Diff line number Diff line
@@ -44,6 +44,10 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
    private static final String FAVORITES_ENTRY_COMPONENT =
            "com.android.contacts.DialtactsFavoritesEntryActivity";

    /** Opens the Contacts app in the state the user has last set it to */
    private static final String CONTACTS_LAUNCH_ACTIVITY =
            "com.android.contacts.ContactsLaunchActivity";

    private static final int TAB_INDEX_DIALER = 0;
    private static final int TAB_INDEX_CALL_LOG = 1;
    private static final int TAB_INDEX_CONTACTS = 2;
@@ -57,10 +61,20 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
    static final String PREF_FAVORITES_AS_CONTACTS = "favorites_as_contacts";
    static final boolean PREF_FAVORITES_AS_CONTACTS_DEFAULT = false;

    /** Last manually selected tab index */
    private static final String PREF_LAST_MANUALLY_SELECTED_TAB = "last_manually_selected_tab";
    private static final int PREF_LAST_MANUALLY_SELECTED_TAB_DEFAULT = TAB_INDEX_DIALER;

    private TabHost mTabHost;
    private String mFilterText;
    private Uri mDialUri;

    /**
     * The index of the tab that has last been manually selected (the user clicked on a tab).
     * This value does not keep track of programmatically set Tabs (e.g. Call Log after a Call)
     */
    private int mLastManuallySelectedTab;

    @Override
    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
@@ -80,6 +94,11 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
        setupContactsTab();
        setupFavoritesTab();

        // Load the last manually loaded tab
        final SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
        mLastManuallySelectedTab = prefs.getInt(PREF_LAST_MANUALLY_SELECTED_TAB,
                PREF_LAST_MANUALLY_SELECTED_TAB_DEFAULT);

        setCurrentTab(intent);

        if (intent.getAction().equals(UI.FILTER_CONTACTS_ACTION)
@@ -92,13 +111,15 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
    protected void onPause() {
        super.onPause();

        int currentTabIndex = mTabHost.getCurrentTab();
        final int currentTabIndex = mTabHost.getCurrentTab();
        final SharedPreferences.Editor editor =
                getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE).edit();
        if (currentTabIndex == TAB_INDEX_CONTACTS || currentTabIndex == TAB_INDEX_FAVORITES) {
            SharedPreferences.Editor editor = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE)
                    .edit();
            editor.putBoolean(PREF_FAVORITES_AS_CONTACTS, currentTabIndex == TAB_INDEX_FAVORITES);
            editor.commit();
        }
        editor.putInt(PREF_LAST_MANUALLY_SELECTED_TAB, mLastManuallySelectedTab);

        editor.commit();
    }

    private void fixIntent(Intent intent) {
@@ -181,7 +202,7 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
    /**
     * Sets the current tab based on the intent's request type
     *
     * @param recentCallsRequest true is the recent calls tab is desired, false otherwise
     * @param intent Intent that contains information about which tab should be selected
     */
    private void setCurrentTab(Intent intent) {
        // If we got here by hitting send and we're in call forward along to the in-call activity
@@ -202,6 +223,10 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
        // state and instead reload their state from the parent's intent
        intent.putExtra(EXTRA_IGNORE_STATE, true);

        // Remember the old manually selected tab index so that it can be restored if it is
        // overwritten by one of the programmatic tab selections
        final int savedTabIndex = mLastManuallySelectedTab;

        // Choose the tab based on the inbound intent
        String componentName = intent.getComponent().getClassName();
        if (getClass().getName().equals(componentName)) {
@@ -212,6 +237,8 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
            }
        } else if (FAVORITES_ENTRY_COMPONENT.equals(componentName)) {
            mTabHost.setCurrentTab(TAB_INDEX_FAVORITES);
        } else if (CONTACTS_LAUNCH_ACTIVITY.equals(componentName)) {
            mTabHost.setCurrentTab(mLastManuallySelectedTab);
        } else {
            SharedPreferences prefs = getSharedPreferences(PREFS_DIALTACTS, MODE_PRIVATE);
            boolean favoritesAsContacts = prefs.getBoolean(PREF_FAVORITES_AS_CONTACTS,
@@ -223,6 +250,9 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
            }
        }

        // Restore to the previous manual selection
        mLastManuallySelectedTab = savedTabIndex;

        // Tell the children activities that they should honor their saved states
        // instead of the state from the parent's intent
        intent.putExtra(EXTRA_IGNORE_STATE, false);
@@ -337,5 +367,9 @@ public class DialtactsActivity extends TabActivity implements TabHost.OnTabChang
        if (activity != null) {
            activity.onWindowFocusChanged(true);
        }

        // Remember this tab index. This function is also called, if the tab is set automatically
        // in which case the setter (setCurrentTab) has to set this to its old value afterwards
        mLastManuallySelectedTab = mTabHost.getCurrentTab();
    }
}