Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1228)

Side by Side Diff: device/power_save_blocker/power_save_blocker_android.cc

Issue 2638973004: Use ContainerView for PowerSaveBlocker to keep screen on (Closed)
Patch Set: fix tests/2 Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/power_save_blocker/power_save_blocker.h" 5 #include "device/power_save_blocker/power_save_blocker.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 14 matching lines...) Expand all
25 // Does the actual work to apply or remove the desired power save block. 25 // Does the actual work to apply or remove the desired power save block.
26 void ApplyBlock(ui::ViewAndroid* view_android); 26 void ApplyBlock(ui::ViewAndroid* view_android);
27 void RemoveBlock(); 27 void RemoveBlock();
28 28
29 private: 29 private:
30 friend class base::RefCountedThreadSafe<Delegate>; 30 friend class base::RefCountedThreadSafe<Delegate>;
31 ~Delegate(); 31 ~Delegate();
32 32
33 base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_; 33 base::android::ScopedJavaGlobalRef<jobject> java_power_save_blocker_;
34 34
35 ui::ViewAndroid::ScopedAnchorView anchor_view_;
36
37 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; 35 scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
38 36
39 DISALLOW_COPY_AND_ASSIGN(Delegate); 37 DISALLOW_COPY_AND_ASSIGN(Delegate);
40 }; 38 };
41 39
42 PowerSaveBlocker::Delegate::Delegate( 40 PowerSaveBlocker::Delegate::Delegate(
43 scoped_refptr<base::SequencedTaskRunner> ui_task_runner) 41 scoped_refptr<base::SequencedTaskRunner> ui_task_runner)
44 : ui_task_runner_(ui_task_runner) { 42 : ui_task_runner_(ui_task_runner) {
45 JNIEnv* env = AttachCurrentThread(); 43 JNIEnv* env = AttachCurrentThread();
46 java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env)); 44 java_power_save_blocker_.Reset(Java_PowerSaveBlocker_create(env));
47 } 45 }
48 46
49 PowerSaveBlocker::Delegate::~Delegate() {} 47 PowerSaveBlocker::Delegate::~Delegate() {}
50 48
51 void PowerSaveBlocker::Delegate::ApplyBlock(ui::ViewAndroid* view_android) { 49 void PowerSaveBlocker::Delegate::ApplyBlock(ui::ViewAndroid* view_android) {
52 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 50 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
53 DCHECK(view_android); 51 DCHECK(view_android);
54 52
55 JNIEnv* env = AttachCurrentThread(); 53 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_);
56 anchor_view_ = view_android->AcquireAnchorView(); 54 ScopedJavaLocalRef<jobject> container_view(view_android->GetContainerView());
57 const ScopedJavaLocalRef<jobject> popup_view = anchor_view_.view(); 55 if (container_view.is_null())
58 if (popup_view.is_null())
59 return; 56 return;
60 view_android->SetAnchorRect(popup_view, gfx::RectF()); 57
61 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); 58 Java_PowerSaveBlocker_applyBlock(AttachCurrentThread(), obj, container_view);
62 Java_PowerSaveBlocker_applyBlock(env, obj, popup_view);
63 } 59 }
64 60
65 void PowerSaveBlocker::Delegate::RemoveBlock() { 61 void PowerSaveBlocker::Delegate::RemoveBlock() {
66 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 62 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
63
67 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_); 64 ScopedJavaLocalRef<jobject> obj(java_power_save_blocker_);
68 Java_PowerSaveBlocker_removeBlock(AttachCurrentThread(), obj); 65 Java_PowerSaveBlocker_removeBlock(AttachCurrentThread(), obj);
69 anchor_view_.Reset();
70 } 66 }
71 67
72 PowerSaveBlocker::PowerSaveBlocker( 68 PowerSaveBlocker::PowerSaveBlocker(
73 PowerSaveBlockerType type, 69 PowerSaveBlockerType type,
74 Reason reason, 70 Reason reason,
75 const std::string& description, 71 const std::string& description,
76 scoped_refptr<base::SequencedTaskRunner> ui_task_runner, 72 scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
77 scoped_refptr<base::SingleThreadTaskRunner> blocking_task_runner) 73 scoped_refptr<base::SingleThreadTaskRunner> blocking_task_runner)
78 : ui_task_runner_(ui_task_runner), 74 : ui_task_runner_(ui_task_runner),
79 blocking_task_runner_(blocking_task_runner) { 75 blocking_task_runner_(blocking_task_runner) {
80 // Don't support kPowerSaveBlockPreventAppSuspension 76 // Don't support kPowerSaveBlockPreventAppSuspension
81 } 77 }
82 78
83 PowerSaveBlocker::~PowerSaveBlocker() { 79 PowerSaveBlocker::~PowerSaveBlocker() {
84 if (delegate_.get()) { 80 if (delegate_.get()) {
85 ui_task_runner_->PostTask(FROM_HERE, 81 ui_task_runner_->PostTask(FROM_HERE,
86 base::Bind(&Delegate::RemoveBlock, delegate_)); 82 base::Bind(&Delegate::RemoveBlock, delegate_));
87 } 83 }
88 } 84 }
89 85
90 void PowerSaveBlocker::InitDisplaySleepBlocker(ui::ViewAndroid* view_android) { 86 void PowerSaveBlocker::InitDisplaySleepBlocker(ui::ViewAndroid* view_android) {
91 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 87 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
92 DCHECK(view_android); 88 DCHECK(view_android);
93 89
94 delegate_ = new Delegate(ui_task_runner_); 90 delegate_ = new Delegate(ui_task_runner_);
95 delegate_->ApplyBlock(view_android); 91 delegate_->ApplyBlock(view_android);
96 } 92 }
97 93
98 } // namespace device 94 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698