Simplify navigation in BatteryStatsViewer

Bug: 185952656
Test: mp :BatteryStatsViewer && adb shell am start -n com.android.frameworks.core.batterystatsviewer/.BatteryConsumerPickerActivity
Change-Id: I5c8958411c2436a0d1e8fafb79759b9e40d81b18
This commit is contained in:
Dmitri Plotnikov
2021-04-21 17:08:44 -07:00
parent 991791446c
commit 37e89c99dd
3 changed files with 30 additions and 69 deletions

View File

@@ -25,8 +25,7 @@
<application
android:theme="@style/Theme"
android:label="Battery Stats Viewer">
<activity android:name=".BatteryStatsViewerActivity"
android:icon="@mipmap/ic_launcher"
<activity android:name=".BatteryConsumerPickerActivity"
android:label="Battery Stats"
android:launchMode="singleTop"
android:exported="true">
@@ -36,7 +35,9 @@
</intent-filter>
</activity>
<activity android:name=".BatteryConsumerPickerActivity"
android:label="Select a battery consumer"/>
<activity android:name=".BatteryStatsViewerActivity"
android:icon="@mipmap/ic_launcher"
android:label="Battery Stats"
android:parentActivityName=".BatteryConsumerPickerActivity"/>
</application>
</manifest>

View File

@@ -20,9 +20,7 @@ import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentStatePagerAdapter;
@@ -32,31 +30,14 @@ import com.google.android.material.tabs.TabLayout;
/**
* Picker, showing a sorted lists of applications and other types of entities consuming power.
* Returns the selected entity ID or null.
* Opens BatteryStatsViewerActivity upon item selection.
*/
public class BatteryConsumerPickerActivity extends FragmentActivity {
public static final ActivityResultContract<Void, String> CONTRACT =
new ActivityResultContract<Void, String>() {
@NonNull
@Override
public Intent createIntent(@NonNull Context context, Void aVoid) {
return new Intent(context, BatteryConsumerPickerActivity.class);
}
@Override
public String parseResult(int resultCode, @Nullable Intent intent) {
if (resultCode != RESULT_OK || intent == null) {
return null;
}
return intent.getStringExtra(Intent.EXTRA_RETURN_RESULT);
}
};
private static final String PREF_SELECTED_BATTERY_CONSUMER = "batteryConsumerId";
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.battery_consumer_picker_activity_layout);
@@ -99,18 +80,25 @@ public class BatteryConsumerPickerActivity extends FragmentActivity {
viewPager.setAdapter(adapter);
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(viewPager);
if (icicle == null) {
final String batteryConsumerId = getPreferences(Context.MODE_PRIVATE)
.getString(PREF_SELECTED_BATTERY_CONSUMER, null);
if (batteryConsumerId != null) {
startBatteryStatsActivity(batteryConsumerId);
}
}
}
public void setSelectedBatteryConsumer(String batteryConsumerId) {
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_RETURN_RESULT, batteryConsumerId);
setResult(RESULT_OK, intent);
finish();
getPreferences(Context.MODE_PRIVATE).edit()
.putString(PREF_SELECTED_BATTERY_CONSUMER, batteryConsumerId)
.apply();
startBatteryStatsActivity(batteryConsumerId);
}
@Override
public boolean onNavigateUp() {
onBackPressed();
return true;
private void startBatteryStatsActivity(String batteryConsumerId) {
final Intent intent = new Intent(this, BatteryStatsViewerActivity.class)
.putExtra(BatteryStatsViewerActivity.EXTRA_BATTERY_CONSUMER, batteryConsumerId);
startActivity(intent);
}
}

View File

@@ -17,7 +17,6 @@
package com.android.frameworks.core.batterystatsviewer;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
@@ -27,9 +26,9 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.activity.ComponentActivity;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.loader.app.LoaderManager;
@@ -45,14 +44,14 @@ import java.util.List;
import java.util.Locale;
public class BatteryStatsViewerActivity extends ComponentActivity {
public static final String EXTRA_BATTERY_CONSUMER = "batteryConsumerId";
private static final int BATTERY_STATS_REFRESH_RATE_MILLIS = 60 * 1000;
private static final int MILLIS_IN_MINUTE = 60000;
private static final String PREF_SELECTED_BATTERY_CONSUMER = "batteryConsumerId";
private static final int LOADER_BATTERY_USAGE_STATS = 1;
private BatteryStatsDataAdapter mBatteryStatsDataAdapter;
private final Runnable mBatteryStatsRefresh = this::periodicBatteryStatsRefresh;
private SharedPreferences mSharedPref;
private String mBatteryConsumerId;
private TextView mTitleView;
private TextView mDetailsView;
@@ -62,21 +61,16 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
private RecyclerView mBatteryConsumerDataView;
private View mLoadingView;
private View mEmptyView;
private final ActivityResultLauncher<Void> mStartAppPicker = registerForActivityResult(
BatteryConsumerPickerActivity.CONTRACT, this::onApplicationSelected);
private List<BatteryUsageStats> mBatteryUsageStats;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSharedPref = getPreferences(Context.MODE_PRIVATE);
mBatteryConsumerId = getIntent().getStringExtra(EXTRA_BATTERY_CONSUMER);
setContentView(R.layout.battery_stats_viewer_layout);
View appCard = findViewById(R.id.app_card);
appCard.setOnClickListener((e) -> startAppPicker());
mTitleView = findViewById(android.R.id.title);
mDetailsView = findViewById(R.id.details);
mIconView = findViewById(android.R.id.icon);
@@ -91,11 +85,7 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
mLoadingView = findViewById(R.id.loading_view);
mEmptyView = findViewById(R.id.empty_view);
mBatteryConsumerId = mSharedPref.getString(PREF_SELECTED_BATTERY_CONSUMER, null);
loadBatteryStats();
if (mBatteryConsumerId == null) {
startAppPicker();
}
}
@Override
@@ -110,25 +100,6 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
getMainThreadHandler().removeCallbacks(mBatteryStatsRefresh);
}
private void startAppPicker() {
mStartAppPicker.launch(null);
}
private void onApplicationSelected(String batteryConsumerId) {
if (batteryConsumerId == null) {
if (mBatteryConsumerId == null) {
finish();
}
} else {
mBatteryConsumerId = batteryConsumerId;
mSharedPref.edit()
.putString(PREF_SELECTED_BATTERY_CONSUMER, mBatteryConsumerId)
.apply();
mLoadingView.setVisibility(View.VISIBLE);
loadBatteryStats();
}
}
private void periodicBatteryStatsRefresh() {
loadBatteryStats();
getMainThreadHandler().postDelayed(mBatteryStatsRefresh, BATTERY_STATS_REFRESH_RATE_MILLIS);
@@ -200,9 +171,10 @@ public class BatteryStatsViewerActivity extends ComponentActivity {
BatteryConsumerInfoHelper.BatteryConsumerInfo
batteryConsumerInfo = batteryConsumerData.getBatteryConsumerInfo();
if (batteryConsumerInfo == null) {
mTitleView.setText("Battery consumer not found");
mPackagesView.setVisibility(View.GONE);
mHeadingsView.setVisibility(View.GONE);
Toast.makeText(this, "Battery consumer not found: " + mBatteryConsumerId,
Toast.LENGTH_SHORT).show();
finish();
return;
} else {
mTitleView.setText(batteryConsumerInfo.label);
if (batteryConsumerInfo.details != null) {