15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liupackage org.chromium.content.browser; 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport android.content.BroadcastReceiver; 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport android.content.Context; 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport android.content.Intent; 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport android.content.IntentFilter; 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport android.util.Log; 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport org.chromium.base.CalledByNative; 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport org.chromium.base.JNINamespace; 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu/** 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Android implementation details for content::TimeZoneMonitorAndroid. 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu@JNINamespace("content") 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass TimeZoneMonitor { 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private static final String TAG = "TimeZoneMonitor"; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private final Context mAppContext; 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private final IntentFilter mFilter = new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED); 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @Override 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public void onReceive(Context context, Intent intent) { 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED)) { 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Log.e(TAG, "unexpected intent"); 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return; 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu nativeTimeZoneChangedFromJava(mNativePtr); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }; 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private long mNativePtr; 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Start listening for intents. 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @param nativePtr The native content::TimeZoneMonitorAndroid to notify of time zone changes. 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private TimeZoneMonitor(Context context, long nativePtr) { 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mAppContext = context.getApplicationContext(); 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mNativePtr = nativePtr; 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mAppContext.registerReceiver(mBroadcastReceiver, mFilter); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @CalledByNative 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static TimeZoneMonitor getInstance(Context context, long nativePtr) { 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return new TimeZoneMonitor(context, nativePtr); 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Stop listening for intents. 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @CalledByNative 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void stop() { 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mAppContext.unregisterReceiver(mBroadcastReceiver); 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mNativePtr = 0; 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Native JNI call to content::TimeZoneMonitorAndroid::TimeZoneChanged. 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * See content/browser/time_zone_monitor_android.cc. 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private native void nativeTimeZoneChangedFromJava(long nativeTimeZoneMonitorAndroid); 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 69