Home | History | Annotate | Download | only in android
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/android/new_tab_page_prefs.h"
      6 
      7 #include <jni.h>
      8 
      9 #include "base/android/jni_string.h"
     10 #include "base/prefs/pref_service.h"
     11 #include "base/prefs/scoped_user_pref_update.h"
     12 #include "chrome/browser/profiles/profile_android.h"
     13 #include "chrome/common/pref_names.h"
     14 #include "components/user_prefs/pref_registry_syncable.h"
     15 #include "jni/NewTabPagePrefs_jni.h"
     16 
     17 using base::android::ConvertJavaStringToUTF8;
     18 
     19 static jlong Init(JNIEnv* env, jclass clazz, jobject profile) {
     20   NewTabPagePrefs* new_tab_page_prefs =
     21       new NewTabPagePrefs(ProfileAndroid::FromProfileAndroid(profile));
     22   return reinterpret_cast<intptr_t>(new_tab_page_prefs);
     23 }
     24 
     25 NewTabPagePrefs::NewTabPagePrefs(Profile* profile)
     26   : profile_(profile) {
     27 }
     28 
     29 void NewTabPagePrefs::Destroy(JNIEnv* env, jobject obj) {
     30   delete this;
     31 }
     32 
     33 NewTabPagePrefs::~NewTabPagePrefs() {
     34 }
     35 
     36 jboolean NewTabPagePrefs::GetSnapshotDocumentCollapsed(JNIEnv* env,
     37                                                        jobject obj) {
     38   return profile_->GetPrefs()->GetBoolean(prefs::kNtpCollapsedSnapshotDocument);
     39 }
     40 
     41 void NewTabPagePrefs::SetSnapshotDocumentCollapsed(JNIEnv* env,
     42                                                    jobject obj,
     43                                                    jboolean is_collapsed) {
     44   PrefService* prefs = profile_->GetPrefs();
     45   prefs->SetBoolean(prefs::kNtpCollapsedSnapshotDocument, is_collapsed);
     46 }
     47 
     48 jboolean NewTabPagePrefs::GetRecentlyClosedTabsCollapsed(JNIEnv* env,
     49                                                          jobject obj) {
     50   return profile_->GetPrefs()->GetBoolean(
     51       prefs::kNtpCollapsedRecentlyClosedTabs);
     52 }
     53 
     54 void NewTabPagePrefs::SetRecentlyClosedTabsCollapsed(JNIEnv* env,
     55                                                      jobject obj,
     56                                                      jboolean is_collapsed) {
     57   PrefService* prefs = profile_->GetPrefs();
     58   prefs->SetBoolean(prefs::kNtpCollapsedRecentlyClosedTabs, is_collapsed);
     59 }
     60 
     61 jboolean NewTabPagePrefs::GetSyncPromoCollapsed(JNIEnv* env,
     62                                                        jobject obj) {
     63   return profile_->GetPrefs()->GetBoolean(prefs::kNtpCollapsedSyncPromo);
     64 }
     65 
     66 void NewTabPagePrefs::SetSyncPromoCollapsed(JNIEnv* env,
     67                                             jobject obj,
     68                                             jboolean is_collapsed) {
     69   PrefService* prefs = profile_->GetPrefs();
     70   prefs->SetBoolean(prefs::kNtpCollapsedSyncPromo, is_collapsed);
     71 }
     72 
     73 jboolean NewTabPagePrefs::GetForeignSessionCollapsed(JNIEnv* env,
     74                                                      jobject obj,
     75                                                      jstring session_tag) {
     76   const DictionaryValue* dict = profile_->GetPrefs()->GetDictionary(
     77       prefs::kNtpCollapsedForeignSessions);
     78   return dict && dict->HasKey(ConvertJavaStringToUTF8(env, session_tag));
     79 }
     80 
     81 void NewTabPagePrefs::SetForeignSessionCollapsed(JNIEnv* env,
     82                                                  jobject obj,
     83                                                  jstring session_tag,
     84                                                  jboolean is_collapsed) {
     85   // Store session tags for collapsed sessions in a preference so that the
     86   // collapsed state persists.
     87   PrefService* prefs = profile_->GetPrefs();
     88   DictionaryPrefUpdate update(prefs, prefs::kNtpCollapsedForeignSessions);
     89   if (is_collapsed)
     90     update.Get()->SetBoolean(ConvertJavaStringToUTF8(env, session_tag), true);
     91   else
     92     update.Get()->Remove(ConvertJavaStringToUTF8(env, session_tag), NULL);
     93 }
     94 
     95 // static
     96 void NewTabPagePrefs::RegisterProfilePrefs(
     97     user_prefs::PrefRegistrySyncable* registry) {
     98   registry->RegisterBooleanPref(
     99       prefs::kNtpCollapsedSnapshotDocument,
    100       false,
    101       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
    102   registry->RegisterBooleanPref(
    103       prefs::kNtpCollapsedRecentlyClosedTabs,
    104       false,
    105       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
    106   registry->RegisterBooleanPref(
    107       prefs::kNtpCollapsedSyncPromo,
    108       false,
    109       user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
    110 }
    111 
    112 // static
    113 bool NewTabPagePrefs::RegisterNewTabPagePrefs(JNIEnv* env) {
    114   return RegisterNativesImpl(env);
    115 }
    116