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

Commit 8302b126 authored by Joel Galenson's avatar Joel Galenson
Browse files

Add a wifi-style progress bar to the Permissions Hub.

Use a linear progress bar (like on the wifi scan screen) when the
Permissions Hub is loading (except for the initial load, when we still
show the circular icon).  We hide the progress bar when it is not
visible so we keep the new app bar shadow behavior.

Bug: 123538370
Test: Open Permissions Hub, refresh it, click something, and go back.
Change-Id: I1a9dc7d831e387bfd917d16feacb11cdc448d256
parent a13efa06
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -35,7 +35,8 @@ LOCAL_STATIC_ANDROID_LIBRARIES += \
    SettingsLibActionButtonsPreference \
    SettingsLibBarChartPreference \
    SettingsLibEntityHeaderWidgets \
    SettingsLibActionBarShadow
    SettingsLibActionBarShadow \
    SettingsLibProgressBar

LOCAL_STATIC_JAVA_LIBRARIES := \
    androidx.annotation_annotation
+6 −3
Original line number Diff line number Diff line
@@ -14,10 +14,13 @@
     limitations under the License.
-->

<FrameLayout
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/progress_header" />

    <FrameLayout
        android:layout_width="match_parent"
@@ -50,4 +53,4 @@

    </FrameLayout>

</FrameLayout>
</LinearLayout>
+16 −0
Original line number Diff line number Diff line
@@ -102,6 +102,9 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
    private static final String KEY_SPINNER_SORT_INDEX = "_sort_index";
    private static final String SPINNER_SORT_INDEX_KEY = PermissionUsageFragment.class.getName()
            + KEY_SPINNER_SORT_INDEX;
    private static final String KEY_FINISHED_INITIAL_LOAD = "_finished_initial_load";
    private static final String FINISHED_INITIAL_LOAD_KEY = PermissionUsageFragment.class.getName()
            + KEY_FINISHED_INITIAL_LOAD;

    /**
     * The maximum number of columns shown in the bar chart.
@@ -125,6 +128,8 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
    private Spinner mSortSpinner;
    private FilterSpinnerAdapter<SortItem> mSortAdapter;

    private boolean mFinishedInitialLoad;

    /**
     * Only used to restore permission selection state or use the passed permission after onCreate.
     * Once the first list of groups is reported, this becomes invalid.
@@ -162,6 +167,10 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
    public void onStart() {
        super.onStart();
        getActivity().setTitle(R.string.permission_usage_title);

        if (mFinishedInitialLoad) {
            setProgressBarVisible(true);
        }
    }

    @Override
@@ -173,6 +182,7 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
            mSavedGroupName = savedInstanceState.getString(PERMS_INDEX_KEY);
            mSavedTimeSpinnerIndex = savedInstanceState.getInt(SPINNER_TIME_INDEX_KEY);
            mSavedSortSpinnerIndex = savedInstanceState.getInt(SPINNER_SORT_INDEX_KEY);
            mFinishedInitialLoad = savedInstanceState.getBoolean(FINISHED_INITIAL_LOAD_KEY);
        }

        setLoading(true, false);
@@ -271,6 +281,7 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
        outState.putString(PERMS_INDEX_KEY, mFilterGroup);
        outState.putInt(SPINNER_TIME_INDEX_KEY, mFilterSpinnerTime.getSelectedItemPosition());
        outState.putInt(SPINNER_SORT_INDEX_KEY, mSortSpinner.getSelectedItemPosition());
        outState.putBoolean(FINISHED_INITIAL_LOAD_KEY, mFinishedInitialLoad);
    }

    @Override
@@ -478,6 +489,8 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
            }

            setLoading(false, true);
            mFinishedInitialLoad = true;
            setProgressBarVisible(false);
        }).execute(permApps.toArray(new PermissionApps.PermissionApp[permApps.size()]));
    }

@@ -513,6 +526,9 @@ public class PermissionUsageFragment extends SettingsWithButtonHeader implements
                filterTimeBeginMillis, Long.MAX_VALUE, PermissionUsages.USAGE_FLAG_LAST
                        | PermissionUsages.USAGE_FLAG_HISTORICAL, getActivity().getLoaderManager(),
                false /*getUiInfo*/, this /*callback*/, false /*sync*/);
        if (mFinishedInitialLoad) {
            setProgressBarVisible(true);
        }
    }

    /**
+10 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ public abstract class PermissionsFrameFragment extends PreferenceFragmentCompat

    private TextView mEmptyView;
    private View mLoadingView;
    private View mProgressHeader;
    private View mProgressView;
    private ViewGroup mPrefsView;
    private NestedScrollView mNestedScrollView;
    private boolean mIsLoading;
@@ -83,6 +85,9 @@ public abstract class PermissionsFrameFragment extends PreferenceFragmentCompat
        setLoading(mIsLoading, false, true /* force */);
        mPrefsView.addView(mPreferencesContainer, 0);
        mNestedScrollView = rootView.requireViewById(R.id.nested_scroll_view);
        mProgressHeader = rootView.requireViewById(R.id.progress_bar_animation);
        mProgressView = rootView.requireViewById(R.id.progress_bar_background);
        setProgressBarVisible(false);
        return rootView;
    }

@@ -125,6 +130,11 @@ public abstract class PermissionsFrameFragment extends PreferenceFragmentCompat
        }
    }

    protected void setProgressBarVisible(boolean visible) {
        mProgressHeader.setVisibility(visible ? View.VISIBLE : View.GONE);
        mProgressView.setVisibility(visible ? View.VISIBLE : View.GONE);
    }

    /**
     * Either show the empty view or the recycler view. To be called any time the adapter changes.
     */