2011년 7월 26일 화요일

How to rotate screen orientation by pressing a key or in Settings>Display?



There is no gyroscope to detect device orientation on my device. So I want to rotate screen orientation when user pressing a key such as ALT key or setting "Auto-rotate screen" on in Settings>Display.


1. Modify the label of Auto-rotate screen in strings.xml

--- a/packages/apps/Settings/res/values/strings.xml 2011-07-25 14:17:04.634655000 +0900
+++ b/packages/apps/Settings/res/values/strings.xml 2011-07-25 14:21:31.033813231 +0900
@@ -1161,8 +1161,8 @@
     <string name="animations_summary_on">Show animation when opening & closing windows</string>
>
     <!-- Sound & display settings screen, animations option summary text when check box is clear --
>
     <string name="animations_summary_off">Show animation when opening & closing windows</string
>
-    <!-- Sound & display settings screen, accelerometer-based rotation check box label --
>
-    <string name="accelerometer_title">Auto-rotate screen</string
>
+    <!-- Sound & display settings screen, accelerometer-based rotation check box label // Modified by kangadin --
+    <string name="accelerometer_title">Landscape mode</string>
>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected --
>
     <string name="accelerometer_summary_on">Switch orientation automatically when rotating phone</string
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is clear -->


2. Modify setRotation() and setRotationUncheckedLocked() functions in WindowManagerService.java


--- a/frameworks/base/services/java/com/android/server/WindowManagerService.java 2011-07-25 17:53:16.803818344 +0900
+++ b/frameworks/base/services/java/com/android/server/WindowManagerService.java 2011-07-26 10:21:02.353842187 +0900
@@ -4530,8 +4530,9 @@
             mLastRotationFlags = animFlags;
         }
         if (DEBUG_ORIENTATION) Slog.v(TAG, "Overwriting rotation value from " + rotation);
-        rotation = mPolicy.rotationForOrientationLw(mForcedAppOrientation,
-                mRotation, mDisplayEnabled);
+        // kangadin
+        //rotation = mPolicy.rotationForOrientationLw(mForcedAppOrientation,
+        //        mRotation, mDisplayEnabled);
         if (DEBUG_ORIENTATION) Slog.v(TAG, "new rotation is set to " + rotation);
         changed = mDisplayEnabled && mRotation != rotation;

3. Add key code processing in interceptkeyBeforeDispatching() function in PhoneWindowManager.java


--- a/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 2011-07-25 17:53:34.203818351 +0900
+++ b/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java 2011-07-26 14:20:40.597822000 +0900
@@ -223,7 +223,7 @@
     boolean mScreenOn = false;
     boolean mOrientationSensorEnabled = false;
     int mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
-    static final int DEFAULT_ACCELEROMETER_ROTATION = 0;
+    static final int DEFAULT_ACCELEROMETER_ROTATION = 1; // kangadin
     int mAccelerometerDefault = DEFAULT_ACCELEROMETER_ROTATION;
     boolean mHasSoftInput = false;
   
@@ -596,6 +596,8 @@
                 com.android.internal.R.array.config_safeModeDisabledVibePattern);
         mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(),
                 com.android.internal.R.array.config_safeModeEnabledVibePattern);
+        Settings.System.putInt(mContext.getContentResolver(), // kangadin
+            Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION);
     }


     public void updateSettings() {
@@ -616,7 +618,14 @@
                     Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION);
             if (mAccelerometerDefault != accelerometerDefault) {
                 mAccelerometerDefault = accelerometerDefault;
-                updateOrientationListenerLp();
+                //updateOrientationListenerLp(); // kangadin
+                try { // kangadin
+                    mWindowManager.setRotation(accelerometerDefault == 0 ?
+ Surface.ROTATION_90 : Surface.ROTATION_0,
+ true, mFancyRotationAnimation);
+                } catch (RemoteException e) {
+                    // Ignore
+                }  
             }
             if (mSystemReady) {
                 int pointerLocation = Settings.System.getInt(resolver,
@@ -1218,6 +1227,15 @@
                     return true;
                 }
             }
+        } else if (keyCode == KeyEvent.KEYCODE_ALT_LEFT || keyCode == KeyEvent.KEYCODE_ALT_RIGHT) { // kangadin
+            if (down && repeatCount == 0) {
+                // Toggle ACCELEROMETER_ROTATION
+                int ro = Settings.System.getInt(mContext.getContentResolver(),
+                    Settings.System.ACCELEROMETER_ROTATION, DEFAULT_ACCELEROMETER_ROTATION);
+                Settings.System.putInt(mContext.getContentResolver(),
+                    Settings.System.ACCELEROMETER_ROTATION, ro == 0 ? 1 : 0);
+            }
+            return true;
         }
       
         // Shortcuts are invoked through Search+key, so intercept those here


4. Remove android:screenOrientation field in AndroidManifest.xml


packages/apps/Launcher2/AndroidManifest.xml
packages/apps/Contacts/AndroidManifest.xml
packages/apps/Phone/AndroidManifest.xml
packages/apps/Settings/AndroidManifest.xml
packages/apps/VoiceDialer/AndroidManifest.xml


(The End)

2011년 4월 8일 금요일

쉐이커타운 서약


1973년 4월, 미국 켄터키 주 렉싱턴에 있는 쉐이커타운에서 수양관 운영자들의 모임이 열렸다. 참석한 사람들은 당시 미국 교계 상황에 대해 우려하면서 고민을 함께했고, 그 결과 좀더 주도면밀하고 철저한 인식과 실천의 필요성에 동의했다. 이 논의와 고민이 인디애나 리치몬드에 있는 요크펠로우 연구소(Yokefellow Institude)에서 구체화되어 소위 '쉐이커타운 서약'(The Shakertown Pledge)이 만들어졌다. 다음에 인용하는 이 서약은 기독교 신앙의 사회적 인식과 실천 의지를 요약한 것으로서 지금까지 가장 모범적인 것으로 인정받고 있다.

나는 지구와 그 안에 있는 모든 것이 자비로운 우리 하나님의 선물임을 인정한다. 또한 나는 지구 자원을 귀중히 여기고 보호하며 애정 깊은 보살핌을 제공하도록 부름 받았음을 믿는다. 더 나아가 나는 생명 자체가 선물이며 동시에 책임과 기쁨과 축제를 위한 부르심임을 믿는다. 이런 믿음에 근거하여 나는 다음과 같이 선언한다.

1. 나는 세계 시민임을 믿는다.
2. 나는 생태계와 조화를 이루는 건전한 삶을 살기로 다짐한다.
3. 나는 단순한 삶을 창조적으로 살고 내 개인적 부를 세계의 가난한 사람들과 공유하기로 다짐한다.
4. 나는 사회 제도를 변혁함으로 좀 더 정의로운 사회를 만들어 모든 사람들이 육체적, 정서적, 정신적, 영적 성장을 위해 필요한 자원들을 자유롭게 사용할 수 있도록 하기 위해 다른 사람들과 협력할 것을 다짐한다.
5. 나는 내 직업에 따르는 책임을 다함으로 다른 사람들에게 해를 끼치는 제품 생산을 피하도록 힘쓸 것을 다짐한다.
6. 나는 내 몸이 하나님의 선물임을 믿고 적당한 영양을 공급하여 건강을 유지하도록 힘쓸 것을 다짐한다.
7. 나는 다른 사람과의 관계를 지속적으로 살핌으로 내 주변에 있는 사람들에게 정직하게, 윤리적으로 그리고 사랑 깊은 마음으로 대할 것을 다짐한다.
8. 나는 기도와 묵상과 연구를 통해 개인적 갱신에 힘쓸 것을 다짐한다.
9. 나는 신앙 공동체에 책임적으로 참여할 것을 다짐한다.

이 서약은 지금까지 미국의 의식 있는 그리스도인들의 표준적인 삶의 지침으로 인정받고 있다. 실로 이 아홉 가지 항목은 그리스도인이 받은 부르심의 구체적 내용을 잘 요약해 놓았다.


- 출처 : "바늘귀를 통과한 부자", pp223~224 - 김영봉 지음

2011년 3월 17일 목요일

앞으로 해야 할 일 30가지

1. 누워있지 말고 끊임없이 움직여라. 움직이면 살고 누우면 죽는다.
2. 하루에 하나씩 즐거운 일을 만들어라. 하루가 즐거우면 평생이 즐겁다.
3. 마음에 들지 않아도 웃으며 받아 들여라. 이 세상 모두가 내 뜻대로 되는 것은 아니다.
4. 자식에게 이래라 저래라 하지 말라. 아무리 효자도 간섭하면 싫어한다.
5. 젊은이들과 어울려라. 젊은 기분이 유입되면 활력이 생겨난다.
6. 한번 한 소리는 두 번 이상 하지 말라. 말이 많으면 따돌림을 받는다.
7. 모여서 남을 흉보지 말라. 나이값 하는 어른만이 존경을 받는다.
8. 성질을 느긋하게 가져라. 조급한 사람이 언제나 먼저 간다.
9. 매일 목욕으로 몸을 깨끗이 하라. 그래야만 사람이 피하지 않는다.
10. 돈이 재산이 아니라 사람이 재산이다. 돈 때문에 사람을 잃지 마라.

11. 좋은 책을 읽고 또 읽어라. 마음이 풍요해지고 치매가 예방된다.
12. 대우 받으려고 하지 마라. 어제 다르고 오늘이 다르다.
13. 먼저 모범을 보여라. 그래야 젊은이들이 본을 받는다.
14. 경로석에 앉지 마라. 서서 움직이면 그 곳이 헬스클럽이다.
15. 주는데 인색하지 마라. 되로 주면 말로 돌아온다.
16. 하루에 10분씩 웃어라. 수명이 연장되고 인자한 어른으로 기억된다.
17. 걱정은 단명의 주범이다. 걱정할 가치가 있는 일만 걱정하라.
18. 남의 잘못을 보며 괴로워 말고 잘하는 점만을 보며 기뻐하라.
19. 급할 때만 신(The God)을 찾지 말고 미리부터 그 분과 관계를 유지하라.
20. 병을 두려워 말라. 일병장수(一病長壽) 무병단명(無病短命)이라는 말도 있다.

21. 세상을 비관적으로 보지 말라. 이왕이면 다홍치마라고 밝은 눈으로 바라보라.
22. 좋건 나쁘건 지난 날은 무효다. 소용없는 일에 집착하지 말라.
23. 누가 욕한다고 속상해 하지 말라. 죽은 사람은 욕먹지 않는다.
24. 고마웠던 기억만을 간직하라. 괴로웠던 기억은 깨끗이 지워버려라.
25. 즐거운 마음으로 잠을 자라. 잠 속에서 축복이 열매를 맺는다.
26. 지혜로운 사람과 어울려라. 바보와 어울리면 어느새 바보가 된다.
27. 그날에 있었던 좋은 일만 기록하라. 그것이 행복 노트다.
28. 작은 것도 크게 기뻐하라. 기쁠 일이 늘어난다.
29. 유서를 작성하고 다녀라. 그것은 자신의 고백서요, 삶의 계산서다.
30. 내가 가지고 떠날 것은 없다. 무엇을 남기고 갈 것인가를 생각하라.

출처 : http://www.sist.co.kr/ceo_c/KoceoRead.jsp?id_code=1101&pageNum=1&idxNum=116