/*
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.stetho.sample;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.SystemClock;
import android.provider.CalendarContract;
import android.util.Log;
import com.facebook.stetho.DumperPluginsProvider;
import com.facebook.stetho.InspectorModulesProvider;
import com.facebook.stetho.Stetho;
import com.facebook.stetho.dumpapp.DumperPlugin;
import com.facebook.stetho.inspector.database.ContentProviderDatabaseDriver;
import com.facebook.stetho.inspector.database.ContentProviderSchema;
import com.facebook.stetho.inspector.database.ContentProviderSchema.Table;
import com.facebook.stetho.inspector.protocol.ChromeDevtoolsDomain;
public class SampleDebugApplication extends SampleApplication {
private static final String TAG = "SampleDebugApplication";
@Override
public void onCreate() {
super.onCreate();
long startTime = SystemClock.elapsedRealtime();
initializeStetho(this);
long elapsed = SystemClock.elapsedRealtime() - startTime;
Log.i(TAG, "Stetho initialized in " + elapsed + " ms");
}
private void initializeStetho(final Context context) {
// See also: Stetho.initializeWithDefaults(Context)
Stetho.initialize(Stetho.newInitializerBuilder(context)
.enableDumpapp(new DumperPluginsProvider() {
@Override
public Iterable<DumperPlugin> get() {
return new Stetho.DefaultDumperPluginsBuilder(context)
.provide(new HelloWorldDumperPlugin())
.provide(new APODDumperPlugin(context.getContentResolver()))
.finish();
}
})
.enableWebKitInspector(new ExtInspectorModulesProvider(context))
.build());
}
private static class ExtInspectorModulesProvider implements InspectorModulesProvider {
private Context mContext;
ExtInspectorModulesProvider(Context context) {
mContext = context;
}
@Override
public Iterable<ChromeDevtoolsDomain> get() {
return new Stetho.DefaultInspectorModulesBuilder(mContext)
.provideDatabaseDriver(createContentProviderDatabaseDriver(mContext))
.finish();
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private ContentProviderDatabaseDriver createContentProviderDatabaseDriver(Context context) {
ContentProviderSchema calendarsSchema = new ContentProviderSchema.Builder()
.table(new Table.Builder()
.uri(CalendarContract.Calendars.CONTENT_URI)
.projection(new String[] {
CalendarContract.Calendars._ID,
CalendarContract.Calendars.NAME,
CalendarContract.Calendars.ACCOUNT_NAME,
CalendarContract.Calendars.IS_PRIMARY,
})
.build())
.build();
// sample events content provider we want to support
ContentProviderSchema eventsSchema = new ContentProviderSchema.Builder()
.table(new Table.Builder()
.uri(CalendarContract.Events.CONTENT_URI)
.projection(new String[]{
CalendarContract.Events._ID,
CalendarContract.Events.TITLE,
CalendarContract.Events.DESCRIPTION,
CalendarContract.Events.ACCOUNT_NAME,
CalendarContract.Events.DTSTART,
CalendarContract.Events.DTEND,
CalendarContract.Events.CALENDAR_ID,
})
.build())
.build();
return new ContentProviderDatabaseDriver(context, calendarsSchema, eventsSchema);
}
}
}