Provide runtime switch for GL acceleration

* new checkbox in debug fragment
* saved value in prefs so it's sticky
* each Activity calls a helper to enable/disable per that flag

Change-Id: I1af1ae9f401bc746cc97da00dfb0e06407b79d46
This commit is contained in:
Andrew Stadler 2010-11-01 16:15:15 -07:00
parent da0d12ca36
commit cd09545b87
24 changed files with 92 additions and 7 deletions

View File

@ -59,8 +59,9 @@
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:name="Email"
android:theme="@android:style/Theme.Light.Holo"
android:hardwareAccelerated="true"
android:hardwareAccelerated="false"
>
<!-- STOPSHIP android:hardwareAccelerated should be "true" -->
<activity
android:name=".activity.Welcome"
>

View File

@ -51,4 +51,10 @@
android:layout_height="wrap_content"
android:text="@string/debug_clear_webview_cache"
/>
<CheckBox
android:id="@+id/debug_disable_graphics_acceleration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/debug_disable_graphics_acceleration_label"
/>
</LinearLayout>

View File

@ -231,15 +231,23 @@
<!-- Version number, shown only on debug screen -->
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
<!-- Do Not Translate. Checkbox label, shown only on debug screen -->
<string name="debug_enable_debug_logging_label" translatable="false">Enable extra debug logging?</string>
<string name="debug_enable_debug_logging_label" translatable="false">
Enable extra debug logging?</string>
<!-- Do Not Translate. Checkbox label, shown only on debug screen -->
<string name="debug_enable_sensitive_logging_label" translatable="false">Enable sensitive information debug logging? (May show passwords in logs.)</string>
<string name="debug_enable_sensitive_logging_label" translatable="false">
Enable sensitive information debug logging? (May show passwords in logs.)</string>
<!-- Do Not Translate. Checkbox label, shown only on debug screen -->
<string name="debug_enable_exchange_logging_label" translatable="false">Enable exchange parser logging? (Extremely verbose)</string>
<string name="debug_enable_exchange_logging_label" translatable="false">
Enable exchange parser logging? (Extremely verbose)</string>
<!-- Do Not Translate. Checkbox label, shown only on debug screen -->
<string name="debug_enable_exchange_file_logging_label" translatable="false">Enable exchange sd card logging?</string>
<string name="debug_enable_exchange_file_logging_label" translatable="false">
Enable exchange sd card logging?</string>
<!-- Do Not Translate. Button label, shown only on debug screen -->
<string name="debug_clear_webview_cache" translatable="false">Clear WebView cache</string>
<string name="debug_clear_webview_cache" translatable="false">
Clear WebView cache</string>
<!-- Do Not Translate. Checkbox label, shown on debug screen. -->
<string name="debug_disable_graphics_acceleration_label" translatable="false">
Disable hardware graphics acceleration</string>
<!-- The text in the small separator between smart folders and the accounts -->
<string name="account_folder_list_separator_accounts">Accounts</string>

View File

@ -74,6 +74,11 @@ public class Email extends Application {
*/
public static final boolean DEBUG_THREAD_CHECK = false; // DON'T SUBMIT WITH TRUE
/**
* If true, inhibit hardware graphics acceleration in UI (for a/b testing)
*/
public static boolean sDebugInhibitGraphicsAcceleration = false;
/**
* The MIME type(s) of attachments we're willing to send via attachments.
*
@ -290,6 +295,7 @@ public class Email extends Application {
sUiThread = Thread.currentThread();
Preferences prefs = Preferences.getPreferences(this);
DEBUG = prefs.getEnableDebugLogging();
sDebugInhibitGraphicsAcceleration = prefs.getInhibitGraphicsAcceleration();
setTempDirectory(this);
// Tie MailRefreshManager to the Controller.

View File

@ -34,6 +34,7 @@ public class Preferences {
private static final String ENABLE_DEBUG_LOGGING = "enableDebugLogging";
private static final String ENABLE_EXCHANGE_LOGGING = "enableExchangeLogging";
private static final String ENABLE_EXCHANGE_FILE_LOGGING = "enableExchangeFileLogging";
private static final String INHIBIT_GRAPHICS_ACCELERATION = "inhibitGraphicsAcceleration";
private static final String DEVICE_UID = "deviceUID";
private static final String ONE_TIME_INITIALIZATION_PROGRESS = "oneTimeInitializationProgress";
private static final String AUTO_ADVANCE_DIRECTION = "autoAdvance";
@ -163,6 +164,14 @@ public class Preferences {
return mSharedPreferences.getBoolean(ENABLE_EXCHANGE_FILE_LOGGING, false);
}
public void setInhibitGraphicsAcceleration(boolean value) {
mSharedPreferences.edit().putBoolean(INHIBIT_GRAPHICS_ACCELERATION, value).apply();
}
public boolean getInhibitGraphicsAcceleration() {
return mSharedPreferences.getBoolean(INHIBIT_GRAPHICS_ACCELERATION, false);
}
/**
* Generate a new "device UID". This is local to Email app only, to prevent possibility
* of correlation with any other user activities in any other apps.

View File

@ -68,6 +68,7 @@ public class AccountFolderList extends Activity implements AccountFolderListFrag
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ActivityHelper.debugSetWindowFlags(this);
// STOPSHIP make progress work properly - temporarily missing from ActionBar
// requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); // this disables ActionBar

View File

@ -17,6 +17,7 @@
package com.android.email.activity;
import com.android.email.Controller;
import com.android.email.Email;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.provider.EmailContent.Mailbox;
@ -26,6 +27,7 @@ import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.provider.Browser;
import android.view.WindowManager;
/**
* Various methods that are used by both 1-pane and 2-pane activities.
@ -118,4 +120,22 @@ public final class ActivityHelper {
}
});
}
/**
* If configured via debug flags, inhibit hardware graphics acceleration. Must be called
* early in onCreate().
*
* NOTE: Currently, this only works if HW accel is *not* enabled via the manifest.
*/
public static void debugSetWindowFlags(Activity activity) {
if (Email.sDebugInhibitGraphicsAcceleration) {
// Clear the flag in the activity's window
activity.getWindow().setFlags(0,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
} else {
// Set the flag in the activity's window
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
}
}
}

View File

@ -75,6 +75,7 @@ public class MailboxList extends Activity implements MailboxListFragment.Callbac
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ActivityHelper.debugSetWindowFlags(this);
mAccountId = getIntent().getLongExtra(EXTRA_ACCOUNT_ID, -1);
if (mAccountId == -1) {

View File

@ -275,6 +275,7 @@ public class MessageCompose extends Activity implements OnClickListener, OnFocus
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.message_compose);
mController = Controller.getInstance(getApplication());

View File

@ -19,7 +19,6 @@ package com.android.email.activity;
import com.android.email.Controller;
import com.android.email.ControllerResultUiThreadWrapper;
import com.android.email.Email;
import com.android.email.NotificationController;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.activity.setup.AccountSecurity;
@ -168,6 +167,7 @@ public class MessageList extends Activity implements OnClickListener,
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.message_list);
mControllerCallback = new ControllerResultUiThreadWrapper<ControllerResults>(

View File

@ -109,6 +109,7 @@ public class MessageListXL extends Activity implements
protected void onCreate(Bundle savedInstanceState) {
if (Email.DEBUG_LIFECYCLE && Email.DEBUG) Log.d(Email.LOG_TAG, "MessageListXL onCreate");
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.message_list_xl);
mFragmentManager.onActivityViewReady();

View File

@ -58,6 +58,7 @@ public abstract class MessageViewBase extends Activity implements MessageViewFra
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ActivityHelper.debugSetWindowFlags(this);
setContentView(getLayoutId());
// TODO Turn it into a "managed" dialog?

View File

@ -107,6 +107,7 @@ public class UpgradeAccounts extends ListActivity implements OnClickListener {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ActivityHelper.debugSetWindowFlags(this);
Preferences p = Preferences.getPreferences(this);
Account[] legacyAccounts = p.getAccounts();

View File

@ -154,6 +154,7 @@ public class Welcome extends Activity {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
ActivityHelper.debugSetWindowFlags(this);
// Reset the "accounts changed" notification, now that we're here
Email.setNotifyUiAccountsChanged(false);

View File

@ -18,6 +18,7 @@ package com.android.email.activity.setup;
import com.android.email.R;
import com.android.email.SecurityPolicy;
import com.android.email.activity.ActivityHelper;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.HostAuth;
@ -60,6 +61,7 @@ public class AccountSecurity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
Intent i = getIntent();
long accountId = i.getLongExtra(EXTRA_ACCOUNT_ID, -1);

View File

@ -21,6 +21,7 @@ import com.android.email.Email;
import com.android.email.NotificationController;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.activity.ActivityHelper;
import com.android.email.mail.Sender;
import com.android.email.mail.Store;
import com.android.email.provider.EmailContent;
@ -144,6 +145,7 @@ public class AccountSettingsXL extends PreferenceActivity implements OnClickList
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
Intent i = getIntent();
if (savedInstanceState == null) {

View File

@ -18,6 +18,7 @@ package com.android.email.activity.setup;
import com.android.email.R;
import com.android.email.VendorPolicyLoader;
import com.android.email.activity.ActivityHelper;
import com.android.email.mail.Store;
import com.android.email.provider.EmailContent;
import com.android.email.provider.EmailContent.Account;
@ -47,6 +48,7 @@ public class AccountSetupAccountType extends AccountSetupActivity implements OnC
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
int flowMode = SetupData.getFlowMode();
// If we're in account setup flow mode, for EAS, skip this screen and "click" EAS

View File

@ -19,6 +19,7 @@ package com.android.email.activity.setup;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.VendorPolicyLoader;
import com.android.email.activity.ActivityHelper;
import com.android.email.activity.Welcome;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.HostAuth;
@ -105,6 +106,7 @@ public class AccountSetupBasics extends AccountSetupActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
int flowMode = SetupData.getFlowMode();
if (flowMode == SetupData.FLOW_MODE_RETURN_TO_CALLER) {

View File

@ -17,6 +17,7 @@
package com.android.email.activity.setup;
import com.android.email.R;
import com.android.email.activity.ActivityHelper;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.HostAuth;
@ -79,6 +80,7 @@ public class AccountSetupExchange extends AccountSetupActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.account_setup_exchange);
mFragment = (AccountSetupExchangeFragment)

View File

@ -17,6 +17,7 @@
package com.android.email.activity.setup;
import com.android.email.R;
import com.android.email.activity.ActivityHelper;
import com.android.email.provider.EmailContent.Account;
import android.app.Activity;
@ -45,6 +46,7 @@ public class AccountSetupIncoming extends AccountSetupActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.account_setup_incoming);
mFragment = (AccountSetupIncomingFragment)

View File

@ -19,6 +19,7 @@ package com.android.email.activity.setup;
import com.android.email.AccountBackupRestore;
import com.android.email.R;
import com.android.email.Utility;
import com.android.email.activity.ActivityHelper;
import com.android.email.activity.Welcome;
import com.android.email.provider.EmailContent.Account;
import com.android.email.provider.EmailContent.AccountColumns;
@ -55,6 +56,7 @@ public class AccountSetupNames extends AccountSetupActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.account_setup_names);
mDescription = (EditText)findViewById(R.id.account_description);
mName = (EditText)findViewById(R.id.account_name);

View File

@ -20,6 +20,7 @@ import com.android.email.Email;
import com.android.email.ExchangeUtils;
import com.android.email.R;
import com.android.email.SecurityPolicy.PolicySet;
import com.android.email.activity.ActivityHelper;
import com.android.email.mail.Store;
import com.android.email.provider.EmailContent;
import com.android.email.provider.EmailContent.Account;
@ -69,6 +70,7 @@ public class AccountSetupOptions extends AccountSetupActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.account_setup_options);
mCheckFrequencyView = (Spinner)findViewById(R.id.account_check_frequency);

View File

@ -17,6 +17,7 @@
package com.android.email.activity.setup;
import com.android.email.R;
import com.android.email.activity.ActivityHelper;
import com.android.email.provider.EmailContent.Account;
import android.app.Activity;
@ -45,6 +46,7 @@ public class AccountSetupOutgoing extends Activity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityHelper.debugSetWindowFlags(this);
setContentView(R.layout.account_setup_outgoing);
mFragment = (AccountSetupOutgoingFragment)

View File

@ -41,6 +41,7 @@ public class DebugFragment extends Fragment implements OnCheckedChangeListener,
private CheckBox mEnableDebugLoggingView;
private CheckBox mEnableExchangeLoggingView;
private CheckBox mEnableExchangeFileLoggingView;
private CheckBox mInhibitGraphicsAccelerationView;
private Preferences mPreferences;
@ -78,6 +79,11 @@ public class DebugFragment extends Fragment implements OnCheckedChangeListener,
view.findViewById(R.id.clear_webview_cache).setOnClickListener(this);
mInhibitGraphicsAccelerationView = (CheckBox)
view.findViewById(R.id.debug_disable_graphics_acceleration);
mInhibitGraphicsAccelerationView.setChecked(Email.sDebugInhibitGraphicsAcceleration);
mInhibitGraphicsAccelerationView.setOnCheckedChangeListener(this);
return view;
}
@ -99,6 +105,10 @@ public class DebugFragment extends Fragment implements OnCheckedChangeListener,
}
break;
//EXCHANGE-REMOVE-SECTION-END
case R.id.debug_disable_graphics_acceleration:
Email.sDebugInhibitGraphicsAcceleration = isChecked;
mPreferences.setInhibitGraphicsAcceleration(isChecked);
break;
}
Email.updateLoggingFlags(getActivity());